---
slug: 5-tips-to-master-css
title: 5个技巧助你成为 CSS 大神
author: 灵知
author_title: 前端工程师 / B站UP主
author_url: https://github.com/zxuqian
author_image_url: https://tvax3.sinaimg.cn/crop.0.0.1080.1080.180/b2745d44ly8g8s4muqeggj20u00u0n0k.jpg?KID=imgbed,tva&Expires=1582389585&ssig=EvXmyu%2FXsX
description: 都说 CSS 很难掌握，最愁给页面编写样式，其实都是因为还没有形成一个对 CSS 宏观的了解，只要有了正确的学习方法、设计思维，再通过不断的积累，就能轻松的掌握它。接下来我会把掌握 CSS 的 5 个技巧整理一下，让你在以后编写 CSS 的时候不再发愁。
tags: [前端, css]
bvid: BV1Pt4y1m7ns
oid: "625417387"
---

作为一名前端工程师，经常在写完 HTML 以后，才觉得真正的噩梦要开始了，啊，写 CSS 的时候，面对满屏乱飞的组件，真想手动给他们挪到该在位置上…… 都说 CSS 很难掌握，最愁给页面编写样式，其实都是因为还没有形成一个对 CSS 宏观的了解，只要有了正确的学习方法、设计思维，再通过不断的积累，就能轻松的掌握它。接下来我会把掌握 CSS 的 5 个技巧整理一下，让你在以后编写 CSS 的时候不再发愁。

<!-- truncate -->

[B 站视频 - 点击传送](https://www.bilibili.com/video/BV1Pt4y1m7ns/)

## 样式调整

CSS 最基本的功能就是调整 HTML 的样式，可以设置元素的宽高、字体的颜色、大小和间距、背景颜色或图片等。这些跟传统的富文本编辑器比如 word 是一样的效果。有些属性可以一次性设置多个项目，比如`background`可以同时设置：

- background-color
- background-image
- background-origin
- background-position
- ...等等

### action

业余时间经常到像 mdn 之类的文档网站上去查它们的用法，能长不少见识。

## 布局调整

CSS 的一大难题就在于对页面进行整体布局，这个时候就需要把思维放到一个整体上来，对布局进行规划，然后合理利用 css 的 flex 和 grid 来实现。

多数情况下的页面并不是规规矩矩的布局，经常会有层叠、覆盖、偏移等奇特的布局方式，所以 CSS 有脱离文档流这个概念，使用 absolute 绝对定位、fixed 固定定位、又或者是使用 float 属性都会导致元素脱离正常的文档流，正常的文档流是说元素都是从上到下，从左到右依次排列的（块级元素因为占据一整行，所以都是从上到下）。而元素脱离文档流之后，这个元素就相当于被拿走，后边的元素会占用这个元素的空间，以此类推。而这个单独被拿走的元素则可以通过像 left，top 之类的属性，根据一定的规则来自由移动，如果有重叠，则可以通过 z-index 来控制谁在上谁在下。需要注意的是，使用 tansform 属性调整元素的位置不会导致它们脱离文档流，它们所占的空间会停留在原位。

### 响应式布局

响应式布局用 CSS 实现比较简单，通过 @media 查询屏幕宽度，根据页面的显示效果，把相应的样式覆盖，来让页面显示正常。

### action

要训练自己对布局的规划，可以看一下其他的网站，从简单规整的开始，逐步分析它们的布局，例如导航、头部区域、内容分区和底部信息，自己用简单的 HTML 元素方块把它规划出来，忽略组件细节，慢慢的再去看一些不规则布局的网站，再用自己的方法把它实现出来，慢慢的就会形成一种思路，看到设计稿就能知道该怎么大体规划网站的布局了。

## 形状、特效的拆解与合并

为什么说前端工程师要学一点点设计方面的知识？因为前端页面实现中会有不规则的图形、动画效果等等，而在设计师的眼中，复杂的图形都是由最基本的图形来构成的，所谓的点、线、面。比如用 CSS 画一个三角形出来，可以利用 border，边框。

我们知道一个普通的 div 元素，它有四条边，其实每条边衔接的地方都是被切掉的一角，那么可以通过把 div 的宽度和高度取消，然后通过调整边框的宽度来制作出一个三角形。

又比如说一个波纹动画，可以把它拆解成，两个同样的元素叠在一起，底下的元素先放大，然后把透明度最终过渡成 0，就有了这样的效果

### action

想理解前端页面和组件的特效，先去研究一下设计的基本原则和理论，不但能加快你的开发效率，而且能减少与设计师沟通的成本和时间，变相的减少加班~

## 页面组件设计原则

在写代码之前，你需要先认真研究一下设计稿，分析哪些页面上的组件完全或者大体相同，那么可以把这些组件的样式通过 class 或者其他方式做成一个独立的整体，再通过组合多个 class 来扩展原有的样式。比如说一个按钮可能有不同的颜色、不同的大小，但是形状和文字大小间距都一样的话，可以通过一个 button class 来定义按钮的通用样式，然后利用 color class 来控制它的颜色。

另外如果你发现大多数情况下都在写重复的 CSS 代码，那么这些代码就很可能可以用于多个组件，这种情况下本着“不编写重复代码的精神”，把它单独抽离出来，作为工具 class（utility)，这样其他使用相同 CSS 属性的元素就可以直接使用它。比如说，使用 flex 布局时，可以定义一个`.flex` class，用于开启 flex，然后定义一个`.column` class 用于按列排布，还可以定义`.center`, `.left` 等 class 控制 flex 子元素的对齐方式。

```html
<div class="flex column">
  <div>flex1</div>
  <div>flex2</div>
  <div>flex3</div>
</div>
```

### action

在设计组件时，首先分析设计稿中哪些组件大体相同，然后把他们的公共样式抽离出来，有特殊情况时通过组合 class 来覆盖已有的样式，另外在设计组件时，只关心组件盒子内部的区域，不要设置像外边距这样的属性，它们应该由包含这个组件的容器来设置。因为相同的组件在不同容器中的位置和间距可能不同。

## CSS 模块化学习

要学好 CSS，可以把它分解成独立的模块，整体上 CSS 可以做的操作有：

- 通过选择器选择对应的 html 元素，应用样式
- 设置元素外观，比如颜色、背景、字体等
- 调整元素的位置和与其他元素的间距
- 安排一组元素或者整个页面的布局
- 覆盖或继承已有样式

### actions

把这些功能分好类，逐一突破，就不至于感觉 CSS 像大杂烩一样。

## 一些学习资源

学习 CSS 建议看的就是 MDN 和 W3Schools，随时查阅属性的含义，如果想看具体的特效或者图形怎么实现，可以谷歌搜索或者每天浏览一下 codepen 找找灵感。最重要的是一定要动手去写，等积累的多了之后，就会形成套路。

你学会了吗？如果有问题，欢迎通过下方链接参与讨论。
